home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Language/OS - Multiplatform Resource Library
/
LANGUAGE OS.iso
/
lisp
/
clx.lha
/
clx
/
debug
/
event-test.l
< prev
next >
Wrap
Lisp/Scheme
|
1988-09-12
|
7KB
|
234 lines
;;; -*- Mode: LISP; Syntax: Common-lisp; Package: (XTEST (SCL XLIB)); Base: 10 -*-
(defstruct event
key ; Event key
display ; Display event was reported to
;; The following are from the CLX event
code
state
time
event-window
root
drawable
window
child
parent
root-x
root-y
x
y
width
height
border-width
override-redirect-p
same-screen-p
configure-p
hint-p
kind
mode
keymap
focus-p
count
major
minor
above-sibling
place
atom
selection
requestor
target
property
colormap
new-p
installed-p
format
type
data
send-event-p
)
(defun process-input (display &optional timeout)
"Process one event"
(declare (type display display) ; The display (from initialize-clue)
(type (or null number) timeout) ; optional timeout in seconds
(values (or null character))) ; Returns NIL only if timeout exceeded
(let ((event (make-event)))
(setf (event-display event) display)
(macrolet ((set-event (&rest parameters)
`(progn ,@(mapcar #'(lambda (parm)
`(setf (,(intern (concatenate 'string "EVENT-" (string parm)))
event) ,parm))
parameters)))
(dispatch (contact)
`(dispatch-event event event-key send-event-p ,contact)))
(let ((result
(xlib:event-case (display :timeout timeout :force-output-p t)
((:key-press :key-release :button-press :button-release)
(code time root window child root-x root-y x y
state same-screen-p event-key send-event-p)
(set-event code time root window child root-x root-y x y
state same-screen-p)
(dispatch window))
(:motion-notify
(hint-p time root window child root-x root-y x y
state same-screen-p event-key send-event-p)
(set-event hint-p time root window child root-x root-y x y
state same-screen-p)
(dispatch window))
((:enter-notify :leave-notify)
(kind time root window child root-x root-y x y
state mode focus-p same-screen-p event-key send-event-p)
(set-event kind time root window child root-x root-y x y
state mode focus-p same-screen-p)
(dispatch window))
((:focus-in :focus-out)
(kind window mode event-key send-event-p)
(set-event kind window mode)
(dispatch window))
(:keymap-notify
(window keymap event-key send-event-p)
(set-event window keymap)
(dispatch window))
(:exposure
(window x y width height count event-key send-event-p)
(set-event window x y width height count)
(dispatch window))
(:graphics-exposure
(drawable x y width height count major minor event-key send-event-p)
(set-event drawable x y width height count major minor)
(dispatch drawable))
(:no-exposure
(drawable major minor event-key send-event-p)
(set-event drawable major minor)
(dispatch drawable))
(:visibility-notify
(window state event-key send-event-p)
(set-event window state)
(dispatch window))
(:create-notify
(parent window x y width height border-width
override-redirect-p event-key send-event-p)
(set-event parent window x y width height border-width
override-redirect-p)
(dispatch parent))
(:destroy-notify
(event-window window event-key send-event-p)
(set-event event-window window)
(dispatch event-window))
(:unmap-notify
(event-window window configure-p event-key send-event-p)
(set-event event-window window configure-p)
(dispatch event-window))
(:map-notify
(event-window window override-redirect-p event-key send-event-p)
(set-event event-window window override-redirect-p)
(dispatch event-window))
(:map-request
(parent window event-key send-event-p)
(set-event parent window)
(dispatch parent))
(:reparent-notify
(event-window window parent x y override-redirect-p event-key send-event-p)
(set-event event-window window parent x y override-redirect-p)
(dispatch event-window))
(:configure-notify
(event-window window above-sibling x y width height border-width
override-redirect-p event-key send-event-p)
(set-event event-window window above-sibling x y width height
border-width override-redirect-p)
(dispatch event-window))
(:configure-request
(parent window above-sibling x y width height border-width event-key send-event-p)
(set-event parent window above-sibling x y width height border-width)
(dispatch parent))
(:gravity-notify
(event-window window x y event-key send-event-p)
(set-event event-window window x y)
(dispatch event-window))
(:resize-request
(window width height event-key send-event-p)
(set-event window width height)
(dispatch window))
(:circulate-notify
(event-window window parent place event-key send-event-p)
(set-event event-window window parent place)
(dispatch event-window))
(:circulate-request
(parent window place event-key send-event-p)
(set-event parent window place)
(dispatch parent))
(:property-notify
(window atom time state event-key send-event-p)
(set-event window atom time state)
(dispatch window))
(:selection-clear
(time window selection event-key send-event-p)
(set-event time window selection)
(dispatch window))
(:selection-request
(time window requestor selection target property event-key send-event-p)
(set-event time window requestor selection target property)
(dispatch window))
(:selection-notify
(time window selection target property event-key send-event-p)
(set-event time window selection target property)
(dispatch window))
(:colormap-notify
(window colormap new-p installed-p event-key send-event-p)
(set-event window colormap new-p installed-p)
(dispatch window))
(:client-message
(format window type data event-key send-event-p)
(set-event format window type data)
(dispatch window))
(:mapping-notify
(request start count)
(mapping-notify display request start count)) ;; Special case
)))
(and result t)))))
(defun event-case-test (display)
;; Tests universality of display, event-key, event-code, send-event-p and event-window
(event-case (display)
((key-press key-release button-press button-release motion-notify
enter-notify leave-notify focus-in focus-out keymap-notify
exposure graphics-exposure no-exposure visibility-notify
create-notify destroy-notify unmap-notify map-notify map-request
reparent-notify configure-notify gravity-notify resize-request
configure-request circulate-notify circulate-request property-notify
selection-clear selection-request selection-notify colormap-notify client-message)
(display event-key event-code send-event-p event-window)
(print (list display event-key event-code send-event-p event-window)))
(mapping-notify ;; mapping-notify doesn't have event-window
(display event-key event-code send-event-p)
(print (list display event-key event-code send-event-p)))
))